/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Reportes.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JFileChooser;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import pe.edu.pucp.Modelo.Actividad;
import pe.edu.pucp.Modelo.Log;
import pe.edu.pucp.Modelo.Objeto;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.DAO.ReporteAuditoriaDAO;
import pe.edu.pucp.Reportes.Vista.ReporteAuditoriaGUI;
import pe.edu.pucp.Util.Reportclass.AuditoriaDataSource;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author jorge
 */
public class ReporteAuditoriaControlador {
    private ReporteAuditoriaDAO dao;
    private ReporteAuditoriaGUI view;
    private ArrayList<Objeto> lstObjeto;
    private ArrayList<Actividad> lstActividad;
    private ArrayList<Log> lstLog;
    private Usuario usr;
    
    public ReporteAuditoriaControlador(ReporteAuditoriaDAO radao, ReporteAuditoriaGUI raview, Usuario user){
        dao=radao;
        view=raview; 
        usr=user;
        view.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos())); 
        
        llenarObjetoCombo();
        llenarActividadCombo();
        
        view.addBuscarListener(new listarLog());
        view.addLimpiarListener(new limpiar());
        view.addGenerarListener(new Generar());  
//        view.addCarpeta(new AbrirFile()); 
        
        lstLog = dao.listarLog();               
        view.llenaGrilla(lstLog);         
    }

    class listarLog implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int actv = view.getAccion()<0? -1: lstActividad.get(view.getAccion()).getIdactividad();     
            int objt = view.getObjeto()<0? -1: lstObjeto.get(view.getObjeto()).getIdobjeto();     
            lstLog = dao.listarLog(view.getUsuario(),actv,objt,view.getFechaInicio(),view.getFechaFin());               
            view.llenaGrilla(lstLog);  
        }
    }

    private void llenarObjetoCombo(){
        lstObjeto= dao.listarObjeto();
        view.llenarComboObjeto(lstObjeto);
    }       
    
    private void llenarActividadCombo(){
        lstActividad = dao.listarActividad();
        view.llenarComboAccion(lstActividad);
    }   
    
    class limpiar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos();
        }        
    }    

    class Generar implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
           
            if(lstLog.isEmpty()){
                ValHelper.mostrarError("No hay datos para generar el PDF");
            }
            else{
                System.out.println("haciendo reporte 11111");
                try {       
                    System.out.println("haciendo reporte");
                    AuditoriaDataSource datasource = new AuditoriaDataSource();            
                    for (int i=0;i<lstLog.size();i++){                
                        datasource.addLog(lstLog.get(i));                
                    }        
                    
                    HashMap hs = new HashMap(); 
        
                    hs.put("creador", usr.getNombre() + " "+usr.getAppaterno() + " "+usr.getApmaterno());

                    String master = System.getProperty("user.dir");
                    master += "/../SIGEPA_sist/src/main/resources/Recurso/jasper/Auditoria.jasper";
              
                    JasperReport reporte = (JasperReport)JRLoader.loadObjectFromFile(master);                
                    JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, hs, datasource);             

                    JasperViewer.viewReport(jasperPrint,false);
                    System.out.println("haciendo reporte 3332");

                } catch (JRException ex) {
                     
                      System.out.println(ex.getMessage());
                ex.printStackTrace();}                        
            }
        }
    }    
}
